Material on "Super C" from a letter to Bill Robinson, Bandon, OR. I don't have 
a record of the date of the letter,but it was probably about 2 years ago at 
least. I have not gone much further than this with "C", and have forgotten 
most of this. So please don't ask me for advice or help with C. 
           Jean Nance 1576B County Rd. 2350 E, St.Joseph, IL 61873


Dear Sirs: 

I own a copy of your "Super C" package. I have been working on it over the 
last several weeks. So far, I have found the following errors, or very 
confusing sections in the manual: 

Pages 8 and 9, and part of page 10, discuss "device". It is only half way down 
page 10, and after considerable frustration, that you learn that "device" will 
not work if you have more than one disk drive! 

At the bottom of page 13 "stdio.p"is referred to. This is an error, it is 
"std.p". Also, you state that "std.p" contains the list of files on page 12. 
It doesn't contain "ctype.h", or "libcs.l". 

On page 20 there is a reference to a file "exp-text.c". The correct name is 
"text.c". 

At the bottom of page 28, you are told the sample program has a line "#include 
"stdio.h". The actual line is "#include "stdio.c". Therefore, you need to make 
two changes in that line, not one to get the proper form "#include 
"h:stdio.h"". 

On page 31, it is stated that the compiler prints the source files it is 
processing in grey type. These are actually in cyan. 

Near the middle of page 33, you have the following. "If both link files. o.o 
and libc.l are now on the work diskette or the Ram disk, load the loader---". 
Obviously, "linker" is meant here. 

These are the more obvious errors in the first 47 pages, which is as far as I 
have gone at present. You may think these are all minor errors, but when a 
person is working hard to understand an entirely new concept, such errors can 
confuse and frustrate. 

The format of the manual, such that directions for version 2 and for version 3 
are interlaced is very confusing. You could have used different type, or some 
other method of indicating which version is being dealt with at any one time. 
Better yet would have been two manuals, each of them could have been much 
shorter. I have gone through and highlighted version 3 material for myself. It 
takes very careful reading to be sure which directions are for version 2, 
which for version 3, and which cover both versions. The index is very scanty, 
which makes it impossible to look most topics up except by leafing through the 
book. 

The program on page 39 works. But, the first line of text after you run the 
program overlays the command to load the program, so if the program has been 
named "objects",  you get something like this: "h:obe=2.7182818". This is 
messy! A "backslash n" before the first printf line would have prevented this. 
Most of the programs are equally messy, they need carriage returns inserted 
and other changes to make them run nicely. 

At the bottom of page 40, format instructions are explained, but the reader 
must search the book to find that all format instructions are listed on page 
181. If format commands can't be listed here, certainly the reader can be told 
where they are listed. 

Early in the manual, the reader is required to type in programs. But nowhere 
are there any directions as to how to type in the backslash, curly brackets, 
and other special C characters. I finally found these in the appendix on page 
256. They are not listed, but buried in a rather confusing diagram of the 
keyboard. And, the diagram is wrong, in that the two sets of graphics obtained 
with the shift or Commodore logo key and the key, are not correctly 
diagrammed. Look at the Commodore keyboard and compare with that diagram. 

On page 42 there is a program that just does not work. You get a blank screen 
and the program hangs up. Luckily for me, I have a copy of Kerningham and 
Ritchie, and am also working through their beginner programs, from which the 
programs in your manual seem to have been borrowed. In the program on page 42, 
it is necessary to put brackets () around "celsius +32.0". Then the program 
will work! 

On the bottom of page 46 there is an explanation of why it is necessary to use 
(c-'0') in the line shown. I puzzled over it for a long time, and it didn't 
seem to make much sense. Again, good old K.and R. to the rescue. They have an 
excellent explanation of this. 

Along about now, I decided to just explore the book. I saw a reference to the 
graphics demo program (cdemo) on page 203. Since I am using version 3, I was 
instructed to follow the directions, and compile the code which is on the 
system disk. How do you do it? Well, you first erase your Ram disk. Then, you 
load the demo code, and proceed to compile and link it. This gives you an 
error message in the compiler. Finally I took a look at the demo code with the 
editor. It includes two files from the RAM disk!. These, of course, aren't on 
the Ram disk because the contents of the Ram disk have been erased. 

First I tried erasing everything from the RAM disk except the two files that 
are needed by the demo. However, there isn't enough room on the RAM disk to 
save the program if these are on the RAM disk. So, I changed the program to 
get the files from disk a instead of h, and saved the new version to disk b. 
Then I went through the procedure again, using the new version as my source. 
Everything went fine, it compiled, it linked, there was room enough for the 
final program on the RAM disk. There was only one little problem. The damned 
program doesn't work! 

(Note to Bill. The reason it didn't work, which I discovered for myself, is: 
Commodore C graphics are 40 columns. I was trying to run it in 80 columns. It 
does work in 40 columns. However, not easily. The procedure, arrived at by 
trial, error and many curses, is as follows: Set your computer for 40 columns. 
Load "cdemo" which is on work disk 1 and on work disk 2. Nothing happens! Do 
not touch any keys, let it sit for at least 2 or 3 minutes. I presume it is 
doing something important during this period and I don't know how long it 
takes. Then hit the up arrow. Then hit return. The program will run. It will 
run forever,and the only way to turn it off is to hit the reset button. By the 
way, it appears that if you start hitting keys, especially the up arrow/return 
combination too soon, you load only part of the program. It will run for a 
while, but won't run to completion. Mysterious!) 

Returning you to my letter to Abacus:

Having invested $37.95 in this, and a lot of work, I am not about to throw it 
out, but boy, am I tempted! I can only assume that the rest of the book is 
just as full of errors and ambiguities as the section I have already covered. 
This is a no way to learn a language. 

One last question. In version 2, it is apparently possible to make a compiled 
form of a program that will run directly from Basic. This is apparently 
impossible with version 3. Does this mean that a C program compiled with 
version 2 in the proper form can be loaded directly from Basic by someone who 
does not have the C system disk? Would this mean that you could show a friend 
who doesn't have C a program you have written in C? Or just that the part of 
the C system needed to run a program is loaded, then the program itself is 
loaded, and the program runs. If a compiled C program is actually in machine 
language, isn't it possible to load it somehow from Basic? In either version 2 
or version 3? 

(Note- Apparently, the answer is that C version 2 can be compiled to run from 
Basic. Version 3 cannot. They sent a sheet with directions for making a disk 
that will boot from the 128. It loads the central processing program, so you 
end up with a disk that a person with a 128 can use to run C programs. (C test 
disk). They don't make it clear whether this would be copyright infringement 
or not. I assume not, since you don't have the editor, compiler, or linker 
just the processor.  A version of the material is on pages 115 and 116, 
(sysgen) and you may be able to get the information from that. I think what 
they sent me is clearer, let me know if you don't have luck with 115-116 and I 
can get it photocopied.) 

(Continuing letter)

I am rather shocked to find a product put out by Abacus that has so many 
serious and frustrating errors. I will keep going at this, but I resent the 
time I have to spend discovering errors and compensationg for them. This 
package  has been on the market for several years. In that time, did you ever 
feel the responsibility to either put out an "errata" sheet, or better yet, to 
reprint the whole thing? 
                                    Your sincerely, 

To Bill: Their reply was very apologetic. They enclosed a disk of utilities. I 
am sending you a copy, since you too will have to struggle with the manual. 
Their explanation was that the manual was written in German and translated 
into English. (The person who did the translating, I assume, knew German, and 
English, but very little about C.) Apparently, only recently have they 
obtained permission to create a new version of the manual, and they are 
working on it. I also enclose a copy of the "test disk" referred to above, a 
copy of my work disk 1 and a copy of my work disk 2. I can't make most of the 
programs on the utility disk work, but admit I haven't spent much time at it. 

The programs on the work disk are mostly in two forms, source code, and a 
program that can be run from C. For example, "countword.s" would be source 
code. Load it into the editor, and see what it looks like. "Countword" would 
be the result of compiling and linking "countword.s", and can be run directly. 


This is an outline of how to do things. I find it useful because I worked it 
up. Hope it is of some use to you. I have a shortened version of this on a 
sheet of paper and keep it available at all times, to help me remember how to 
do things. 


COMMANDS:
    
Copy. Must be loaded from system disk.
                 copy h:name to a:*

means, copy program "name" from Ram drive to 'a' drive, using the same name.

                   copy h:name to a:name2
means copy program "name" from Ram drive to 'a' drive using different name.

If any other command is given, "copy" is no longer available and must be 
loaded again. When copy is available, the "a:" prompt will be red. 

Rename. Is on Ram disk at loadup.
                com r:newname=oldname
means rename program "oldname" as "newname".

Scratch. Is on Ram disk at loadup.
                   com s:name

means scratch program "name". 

Format. Is on Ram disk at loadup.
                 com n:name, id

EDITOR. 

To write a new program:

Load editor from system disk with "ce" 
F5, and then type "new". Enter 80 for line length. 
Enter file name as h:name.h

Enter an extra line with F7, and color it yellow or other readable color. Then 
enter more lines by hitting F7 until you have the number you need. Type in 
code, proofread it carefully! Proofread it again! 

F5 and then S to save. It will be saved to Ram disk. 
 
Load. To load a source code file into the editor.
      Load editor with "ce".

F5 and then L. (load).
Enter drive designation and file name and hit return.
        For example: b:program.c (return)

Shorter  way to load a file into the editor: assuming program to be loaded is 
in "b" drive. Type: 
      a:ce b:program.c (return)

Save. To save a copy of an edited source file to disk.

F5 and then F for file name change. 
Put work disk in drive a or drive b. Change name to "a:name.s" or "b:name.s" 
and then "S" to save to work disk in drive a or b.(I prefer ".s"  for source, 
they seem to prefer ".c" [code?] ) 
Get out of editor with F5, X. 

COMPILER. 
     Be sure edited program and any link files needed are on Ram disk!
     Load compiler from system disk with "cc".
     Enter "h:name.h" (Return)
     Enter "h:name.o" for link file (default)(return)
     Enter "h:name.e" for error file (default)(return)

     Hit return. If there is any trouble, go back to editor, load source file, 
make necessary crrections and start over. Save to same name.(Automatic 
replace). 

Note. They confuse the issue by suggesting that you use "o.o" for the link 
(object) file rather than "name.o". This works, but I preferred to use the 
default form that includes the name at first. Later when you have a feel for 
what you are doing, using "o.o" will save some typing and disk space. 

Note. The material on page 140 and following explains the use of the compiler 
and is actually easier to follow than the material in the early chapters. 
Notice you can do this: 

     a:cc h:program.h h:program.o h:error.e  (Return). 
The compiler will be loaded and the code will be compiled. A bit more 
efficient, I suggest you do it the original way at first, until you see what 
is what. 

LINKER.
     Load linker from system disk with "cl"
     Enter name "h:name" (Return)
     Enter "libr.l" (default) (Return)
     Enter other library file name if needed. (Return)
     (When all library files needed are listed:
     Enter "h:name.o" (Return)
Note. See page 150 and following for a fairly good description of how to use 
linker. You can link with one line of code, too, like so. 

a:cl h:program h:libc.l h:program.o (Return)

or even:

a:cl h:program h:libc.l h:another lib file  h:program.o

Other library programs may be included here if needed. This will link all in 
one shot. 

You can also compile and link all in one shot. Like so.

a:cc h:program.h h:program.o h:error.e h:program h:libc.l (Return)

The compiler is loaded, the program compiled, the linker is loaded, and the 
program linked. "h:program.o" is understood here, so it isn't necessary to 
type it in.  You are going through all the steps to compile and link, but 
faster and with less typing. 
     
SAVING. After linking and compiling, run the program from the Ram drive. If it 
the way you want it, save it to work disk. To do this, load "copy" from system 
disk. Save with   copy h:name to b:*, or copy h:name to b:name2. 

